Loading Libraries

library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.3.5     ✓ purrr   0.3.4
## ✓ tibble  3.1.4     ✓ dplyr   1.0.7
## ✓ tidyr   1.1.3     ✓ stringr 1.4.0
## ✓ readr   1.4.0     ✓ forcats 0.5.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
# install.packages("vtable")
library(vtable)
## Loading required package: kableExtra
## 
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
## 
##     group_rows
# install.packages("Hmisc")
library("Hmisc")
## Loading required package: lattice
## Loading required package: survival
## Loading required package: Formula
## 
## Attaching package: 'Hmisc'
## The following objects are masked from 'package:dplyr':
## 
##     src, summarize
## The following objects are masked from 'package:base':
## 
##     format.pval, units
# install.packages("corrplot")
library(corrplot)
## corrplot 0.92 loaded
library(naniar)
library(corrplot)
library(stargazer)
## 
## Please cite as:
##  Hlavac, Marek (2018). stargazer: Well-Formatted Regression and Summary Statistics Tables.
##  R package version 5.2.2. https://CRAN.R-project.org/package=stargazer
library(htmltools)

Loading Data

df <- read_csv("../../data/final/merged_data.csv")
## 
## ── Column specification ────────────────────────────────────────────────────────
## cols(
##   .default = col_double(),
##   iso = col_character(),
##   country_name = col_character(),
##   hdi_value = col_character()
## )
## ℹ Use `spec()` for the full column specifications.
adb <- read_csv("../../data/final/adb-members.csv")
## 
## ── Column specification ────────────────────────────────────────────────────────
## cols(
##   country_name = col_character(),
##   iso = col_character(),
##   region = col_character(),
##   donor = col_double(),
##   sids = col_double(),
##   ldc = col_double()
## )
output.fig.dir <- "../../output/figures"
output.tab.dir <- "../../output/tables"

SAVE.RESULTS = TRUE

df <- df %>% 
  rename(migrant_stock=ims_both_sex, 
         refugee_stock=estimated_refugee_stock_incl_asylum_seekers_both_sexes,
         disaster_displacement=disaster_stock_displacementr_raw,
         conflict_displacement=conflict_stock_displacement_raw, 
         climate_change=CCH, 
         air_quality=AIR, 
         rule_of_law=`value.Rule of Law: Estimate`, 
         gov_effectiveness=`value.Government Effectiveness: Estimate`, 
         corruption_control=`value.Control of Corruption: Estimate`,
         state_legit=`P1: State Legitimacy`, 
         cpa_d_12=D12, 
         cpa_d_avg=D_avg, 
         gdp=`GDP per capita (constant 2015 US$)`, 
         gini=`value.Gini index (World Bank estimate)`) %>% 
  mutate(conflict_displacement=conflict_displacement/10000, 
         disaster_displacement=disaster_displacement/10000,
         migrant_stock=migrant_stock/10000,
         refugee_stock=refugee_stock/10000,
         gdp=gdp/1000,
         state_legit=10-state_legit, 
         hdi_value=as.numeric(hdi_value))
## Warning in mask$eval_all_mutate(quo): NAs introduced by coercion
col_names <- c('migrant_stock'='Migrant Stock (10,000s)', 
               'refugee_stock'='Refugee Stock (10,000s)',
               'disaster_displacement'='Internal Displacement Due to Disasters (10,000s)',
               'conflict_displacement'='Internal Displacement Due to Conflict (10,000s)', 
               'climate_change'='Climate Change', 
               'air_quality'='Air Quality', 
               'rule_of_law'='Rule of Law', 
               'gov_effectiveness'='Government Effectiveness', 
               'corruption_control'='Control of Corruption',
               'state_legit'='State Legitimacy', 
               'cpa_d_12'='CPA: D-12', 
               'cpa_d_avg'='CPA: Cluster D Average', 
               'gdp'='GDP Per Capita (1,000s)', 
               'hdi_value'="HDI",
               'gini'="Gini Index") 

generic.cols <- c('iso', 'year', 'country_name', 'region', 'donor', 'sids', 'ldc')
outcome.cols <- c('state_legit', 'cpa_d_avg', 'cpa_d_12')

keep <- df %>% 
  arrange(year, iso) %>% 
  select(names(col_names)) %>% 
  mutate(keep = if_any(everything(), ~ !is.na(.))) %>% 
  pull(keep)

df <- df %>% 
  arrange(year, iso) %>% 
  select(iso, year, names(col_names)) %>% 
  arrange(year) %>% 
  filter(keep) %>% 
  left_join(adb, by='iso')

Dependent variables across time

With both donors and recipients, across regions

for (reg in unique(df$region)) {
  for (outcome in outcome.cols) {
    y.lim <- 5
    if (outcome == 'state_legit') {y.lim <- 10}
    plt <- df %>% 
      filter(region==reg) %>% 
      select('iso', 'year', outcome) %>% 
      drop_na() %>% 
      ggplot(aes_string(x='year', outcome)) +
      geom_line(aes(color=iso)) + 
      geom_point(aes(color=iso)) +
      labs(title=reg, subtitle=paste(col_names[outcome], 'across years')) +
      ylim(0, y.lim) +
      theme_classic()
    print(plt)
    if (SAVE.RESULTS) {
      ggsave(paste(output.fig.dir, '/year_X_', outcome, '_', tolower(str_replace(reg, " " ,"-")), '.png', sep=''))
    }
  }
}
## Note: Using an external vector in selections is ambiguous.
## ℹ Use `all_of(outcome)` instead of `outcome` to silence this message.
## ℹ See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.
## This message is displayed once per session.
## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

With only recipients, across regions

for (reg in unique(df$region)) {
  for (outcome in outcome.cols) {
    y.lim <- 5
    if (outcome == 'state_legit') {y.lim <- 10}
    plt <- df %>% 
      filter(region==reg & donor==0) %>% 
      select('iso', 'year', outcome) %>% 
      drop_na() %>% 
      ggplot(aes_string(x='year', outcome)) +
      geom_line(aes(color=iso)) + 
      geom_point(aes(color=iso)) +
      labs(title=reg, subtitle=paste(col_names[outcome], 'across years')) +
      ylim(0, y.lim) +
      theme_classic()
    print(plt)
    if (SAVE.RESULTS) {
      ggsave(paste(output.fig.dir, '/year_X_', outcome, '_', tolower(str_replace(reg, " " ,"-")), '_recipients', '.png', sep=''))
    }
  }
}
## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

Across donor and recipient countries

for (status in c('Donors', 'Recipients')) {
  for (outcome in outcome.cols) {
    y.lim <- 5
    if (outcome == 'state_legit') {y.lim <- 10}
    plt <- df %>% 
      mutate(donor=ifelse(donor, 'Donors', 'Recipients')) %>% 
      filter(donor==status) %>% 
      select('iso', 'year', outcome) %>% 
      drop_na() %>% 
      ggplot(aes_string(x='year', outcome)) +
      geom_line(aes(color=iso)) + 
      geom_point(aes(color=iso)) +
      labs(title=status, subtitle=paste(col_names[outcome], 'across years')) +
      ylim(0, y.lim) +
      theme_classic()
    print(plt)
    if (SAVE.RESULTS) {
      ggsave(paste(output.fig.dir, '/year_X_', outcome, '_', tolower(status), '.png', sep=''))
    }
  }
}
## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

Paired Scatterplots

## Note: Using an external vector in selections is ambiguous.
## ℹ Use `all_of(generic.cols)` instead of `generic.cols` to silence this message.
## ℹ See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.
## This message is displayed once per session.
## Note: Using an external vector in selections is ambiguous.
## ℹ Use `all_of(col)` instead of `col` to silence this message.
## ℹ See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.
## This message is displayed once per session.
## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image
## Warning in max(sdf$year): no non-missing arguments to max; returning -Inf
## Warning in min(sdf$year): no non-missing arguments to min; returning Inf
## Warning in max(sdf$year): no non-missing arguments to max; returning -Inf
## Warning in min(sdf$year): no non-missing arguments to min; returning Inf

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Warning: ggrepel: 7 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps
## Saving 7 x 5 in image
## Warning: ggrepel: 7 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps

## Warning: ggrepel: 8 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps
## Saving 7 x 5 in image
## Warning: ggrepel: 8 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

## Saving 7 x 5 in image

Fixed Effects Regression

https://www.princeton.edu/~otorres/Panel101R.pdf panel_model <- plm(state_leg ~ climate, data = data_set, indec = c(“iso”, “year”), model = “within”) Maya Van Nuys (she/her) to Everyone (1:31 PM) panel data code (updated): panel_model <- plm(state_leg ~ climate, data = data_set, index = c(“iso”, “year”), model = “within”) library(AER) library(plm)

panel_model <- plm(state_leg ~ climate, data = data_set, index = c(“iso”, “year”), model = “within”, effect = “twoways”)

library(AER)
## Loading required package: car
## Loading required package: carData
## 
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
## 
##     recode
## The following object is masked from 'package:purrr':
## 
##     some
## Loading required package: lmtest
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## Loading required package: sandwich
library(plm)
## 
## Attaching package: 'plm'
## The following objects are masked from 'package:dplyr':
## 
##     between, lag, lead
# plm(state_legit ~ air_quality + climate_change + hdi_value + gdp, data = df, index = c("iso", "year"), model = "within")

climate.model <- plm(state_legit ~ air_quality + climate_change + hdi_value + gdp, data = df, index = c("iso", "year"), model = "within", effect = "twoways")

migration.model <- plm(state_legit ~ migrant_stock + refugee_stock + conflict_displacement + disaster_displacement + gdp, data = df, index = c("iso", "year"), model = "within", effect = "twoways")

governance.model <- plm(state_legit ~ rule_of_law + gov_effectiveness + corruption_control + gdp, data = df, index = c("iso", "year"), model = "within", effect = "twoways")

# full.model <- plm(state_legit ~ rule_of_law + gov_effectiveness + corruption_control + migrant_stock + refugee_stock + conflict_displacement + disaster_displacement + climate_change + air_quality + hdi_value + gdp, data = df, index = c("iso", "year"), model = "within", effect = "twoways")

stargazer(climate.model, migration.model, governance.model, type='text')
## 
## ===================================================================================
##                                            Dependent variable:                     
##                       -------------------------------------------------------------
##                                                state_legit                         
##                               (1)                (2)                  (3)          
## -----------------------------------------------------------------------------------
## air_quality                  0.007                                                 
##                             (0.005)                                                
##                                                                                    
## climate_change              -0.004                                                 
##                             (0.004)                                                
##                                                                                    
## hdi_value                    6.820                                                 
##                             (6.205)                                                
##                                                                                    
## migrant_stock                                   -0.001                             
##                                                (0.004)                             
##                                                                                    
## refugee_stock                                   0.003                              
##                                                (0.008)                             
##                                                                                    
## conflict_displacement                           -0.003                             
##                                                (0.002)                             
##                                                                                    
## disaster_displacement                           0.008*                             
##                                                (0.004)                             
##                                                                                    
## rule_of_law                                                          -0.098        
##                                                                     (0.228)        
##                                                                                    
## gov_effectiveness                                                   -0.438**       
##                                                                     (0.191)        
##                                                                                    
## corruption_control                                                  0.869***       
##                                                                     (0.179)        
##                                                                                    
## gdp                         -0.025              -0.134              -0.046**       
##                             (0.048)            (0.095)              (0.022)        
##                                                                                    
## -----------------------------------------------------------------------------------
## Observations                  178                116                  562          
## R2                           0.025              0.109                0.063         
## Adjusted R2                 -0.317              -0.423               -0.039        
## F Statistic           0.848 (df = 4; 131) 1.766 (df = 5; 72) 8.476*** (df = 4; 506)
## ===================================================================================
## Note:                                                   *p<0.1; **p<0.05; ***p<0.01
if (SAVE.RESULTS) {
  stargazer(climate.model, migration.model, governance.model, type='html', out=paste(output.tab.dir, '/state_legit_reg_fe.html', sep=''))
}
## 
## <table style="text-align:center"><tr><td colspan="4" style="border-bottom: 1px solid black"></td></tr><tr><td style="text-align:left"></td><td colspan="3"><em>Dependent variable:</em></td></tr>
## <tr><td></td><td colspan="3" style="border-bottom: 1px solid black"></td></tr>
## <tr><td style="text-align:left"></td><td colspan="3">state_legit</td></tr>
## <tr><td style="text-align:left"></td><td>(1)</td><td>(2)</td><td>(3)</td></tr>
## <tr><td colspan="4" style="border-bottom: 1px solid black"></td></tr><tr><td style="text-align:left">air_quality</td><td>0.007</td><td></td><td></td></tr>
## <tr><td style="text-align:left"></td><td>(0.005)</td><td></td><td></td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td></td></tr>
## <tr><td style="text-align:left">climate_change</td><td>-0.004</td><td></td><td></td></tr>
## <tr><td style="text-align:left"></td><td>(0.004)</td><td></td><td></td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td></td></tr>
## <tr><td style="text-align:left">hdi_value</td><td>6.820</td><td></td><td></td></tr>
## <tr><td style="text-align:left"></td><td>(6.205)</td><td></td><td></td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td></td></tr>
## <tr><td style="text-align:left">migrant_stock</td><td></td><td>-0.001</td><td></td></tr>
## <tr><td style="text-align:left"></td><td></td><td>(0.004)</td><td></td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td></td></tr>
## <tr><td style="text-align:left">refugee_stock</td><td></td><td>0.003</td><td></td></tr>
## <tr><td style="text-align:left"></td><td></td><td>(0.008)</td><td></td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td></td></tr>
## <tr><td style="text-align:left">conflict_displacement</td><td></td><td>-0.003</td><td></td></tr>
## <tr><td style="text-align:left"></td><td></td><td>(0.002)</td><td></td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td></td></tr>
## <tr><td style="text-align:left">disaster_displacement</td><td></td><td>0.008<sup>*</sup></td><td></td></tr>
## <tr><td style="text-align:left"></td><td></td><td>(0.004)</td><td></td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td></td></tr>
## <tr><td style="text-align:left">rule_of_law</td><td></td><td></td><td>-0.098</td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td>(0.228)</td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td></td></tr>
## <tr><td style="text-align:left">gov_effectiveness</td><td></td><td></td><td>-0.438<sup>**</sup></td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td>(0.191)</td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td></td></tr>
## <tr><td style="text-align:left">corruption_control</td><td></td><td></td><td>0.869<sup>***</sup></td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td>(0.179)</td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td></td></tr>
## <tr><td style="text-align:left">gdp</td><td>-0.025</td><td>-0.134</td><td>-0.046<sup>**</sup></td></tr>
## <tr><td style="text-align:left"></td><td>(0.048)</td><td>(0.095)</td><td>(0.022)</td></tr>
## <tr><td style="text-align:left"></td><td></td><td></td><td></td></tr>
## <tr><td colspan="4" style="border-bottom: 1px solid black"></td></tr><tr><td style="text-align:left">Observations</td><td>178</td><td>116</td><td>562</td></tr>
## <tr><td style="text-align:left">R<sup>2</sup></td><td>0.025</td><td>0.109</td><td>0.063</td></tr>
## <tr><td style="text-align:left">Adjusted R<sup>2</sup></td><td>-0.317</td><td>-0.423</td><td>-0.039</td></tr>
## <tr><td style="text-align:left">F Statistic</td><td>0.848 (df = 4; 131)</td><td>1.766 (df = 5; 72)</td><td>8.476<sup>***</sup> (df = 4; 506)</td></tr>
## <tr><td colspan="4" style="border-bottom: 1px solid black"></td></tr><tr><td style="text-align:left"><em>Note:</em></td><td colspan="3" style="text-align:right"><sup>*</sup>p<0.1; <sup>**</sup>p<0.05; <sup>***</sup>p<0.01</td></tr>
## </table>